package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import java.sql.Statement;
import java.util.Properties;


public class BaseDao {
	Connection con = null;
	static Properties pro = null;
	static{
		try {
			//得到tomcat服务器的路径
			//BaseDao.class.getClassLoader().getResource("db.properties").getPath();
			pro = new Properties();
			pro.load(BaseDao.class.getClassLoader().getResourceAsStream("db.properties"));
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	String driver = pro.getProperty("dataSource.driverClass");
	String url = pro.getProperty("dataSource.jdbcUrl");
	String username = pro.getProperty("dataSource.user");
	String pwd = pro.getProperty("dataSource.password");
	/**
	 * 获得连接的方法
	 * @return
	 */
	public Connection getCon(){
		try {
			//1加载驱动
			Class.forName(driver);
			//2获取连接对象
			con = DriverManager.getConnection(url,username,pwd);
			return con;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 执行增删改的通用方法
	 * @param sql
	 * @param objs
	 * @return
	 */
	public int executeUpdate(String sql,Object[] objs){
		PreparedStatement pst = null;
		try {
			con = this.getCon();//获得连接
//			try {
//				//
//				con.setAutoCommit(false);//
//				//要执行的批量sql语句
//				
//				
//				
//				//
//				con.commit();//事务的提交
//			} catch (Exception e) {
//				// TODO: handle exception
//				con.rollback();
//				e.printStackTrace();
//			}
//			//回滚是通过触发异常进行回滚
			pst = con.prepareStatement(sql);
			if(objs!=null){
				for (int i = 0; i < objs.length; i++) {
					pst.setObject(i+1, objs[i]);
				}
			}
			//发送sql语句，得到受影响的行数
			return pst.executeUpdate();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally{
			this.close(con, pst, null);
		}
		return 0;
	}
	/**
	 * 关闭数据库连接。
	 * @param conn 数据库连接
	 * @param stmt Statement对象
	 * @param rs 结果集
	 */
	public void close(Connection conn, Statement stmt, ResultSet rs) {
		// 若结果集对象不为空，则关闭
		if (rs != null) {
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		// 若Statement对象不为空，则关闭
		if (stmt != null) {
			try {
				stmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		// 若数据库连接对象不为空，则关闭
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
}
